﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using FrbaCommerce.Abm_Cliente;
using FrbaCommerce.Abm_Empresa;

namespace FrbaCommerce.Registro_de_Usuario
{
    public partial class RegistrarUsuario : Form
    {
        Usuario usuario = new Usuario();
        
        public RegistrarUsuario()
        {
            InitializeComponent();
            this.comboBoxTipo.DataSource = this.getTiposUsuario();
            this.textBoxRol.Text = this.comboBoxTipo.Text;
        }

        private String getPasswordEncriptado (String password) 
        {
            CodigoHash encriptador = new CodigoHash();
            return encriptador.GetHash(password);
        }


        private DataTable getTiposUsuario() 
        {
            ConexionSql conexion = new ConexionSql();
            DataSet resul;
            String query = "SELECT descripcion AS descripcion FROM ASDF.Tipo_usuario ORDER BY (id);";

            try 
            {
                resul = conexion.ejecutarConsulta(query);
                return resul.Tables[0];
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }

            return null;
        }

 
        private Boolean validarForm () 
        {
            return (this.txtUserName.Text.Length > 0 &&
                this.txtPassword.Text.Length > 0 &&
                String.Compare(this.txtPassword.Text, this.textBox3.Text) == 0 &&
                this.comboBoxTipo.SelectedIndex >= 0 &&
                this.textBoxRol.Text.Length >= 0
           ); 
        }

        private void comboBox1SelectedIndexChanged(object sender, EventArgs e)
        {
            this.textBoxRol.Text = this.comboBoxTipo.Text;
            this.textBoxRol.Enabled = false;
        }

        private void btnSiguiente_Click(object sender, EventArgs e)
        {
            if (!validarForm())
            {
                MessageBox.Show("Por favor verifique sus datos");
                return;
            }

            usuario.userName = this.txtUserName.Text;
            usuario.password = getPasswordEncriptado(this.txtPassword.Text);
            usuario.id_tipo = this.comboBoxTipo.SelectedIndex + 1;
            usuario.id_rol = getIdRol();

            if (checkUserName()) 
            {
                MessageBox.Show("El nombre de usuario no está disponible");
                return;
            }

            //El usuario se registra con el ABM correspondiente

            if (String.Compare(comboBoxTipo.Text, "Cliente") == 0) 
            { 
                AbmCliente altaCliente = new AbmCliente(new Cliente(), usuario);
                altaCliente.Show();
                this.Close();
            }

            else if (String.Compare(comboBoxTipo.Text, "Empresa") == 0) 
            {
                AbmEmpresa altaEmpresa = new AbmEmpresa (new Empresa(), usuario);
                altaEmpresa.Show();
                this.Close();
            }
        }

        private int getIdRol () 
        {
            ConexionSql conexion = new ConexionSql();
            DataSet resul;
            String query = "SELECT id AS id FROM ASDF.Rol WHERE nombre='";
            query += this.textBoxRol.Text + "';";

            try
            {
                resul = conexion.ejecutarConsulta(query);
                return  Convert.ToInt32(resul.Tables[0].Rows[0].ItemArray[0].ToString());
            }
            catch (Exception ex)
            {
                MessageBox.Show("Problema de conexión con la BD: " + ex.Message);
            }
            return 0;
        }

        public Usuario getUsuario()
        {
            return this.usuario;
        }

        private Boolean checkUserName () 
        {
            return (this.usuario.verficarUser(this.txtUserName.Text));
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            this.Hide();
        }

        private void lblLimpiarCampos_Click(object sender, EventArgs e) 
        {
            
        }

        private void lblLimpiarCampos_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            this.txtUserName.Text = String.Empty;
            this.txtPassword.Text = String.Empty;
            this.textBox3.Text = String.Empty;
            this.comboBoxTipo.Text = String.Empty;
            this.textBoxRol.SelectedText = String.Empty;
            this.comboBoxTipo.DataSource = this.getTiposUsuario();
        }
    }
}
